home *** CD-ROM | disk | FTP | other *** search
- ; kern.asm: 20-Nov-93, 21:52
- IDEAL
- P286
- MODEL LARGE
- ; Fuer Turboc gerettet werden muessen folgende Register:
- ; BP, SS, SP, DS, CS u. SI, DI
-
- MACRO P_START
- push bp
- mov bp, sp
- ENDM
-
- MACRO P_END
- pop bp
- ENDM
-
- MACRO PUSH_REGS
- push ds
- push si
- push di
- ENDM
-
- MACRO POP_REGS
- pop di
- pop si
- pop ds
- ENDM
-
- ;; EXTRN _esr_routine:FAR
-
- PUBLIC _IPXinit;
- PUBLIC _IPXopen_socket;
- PUBLIC _IPXclose_socket;
- PUBLIC _IPXlisten;
- ;; PUBLIC _asm_esr_routine;
- PUBLIC _xmemmove;
- PUBLIC _Net_Call;
-
- DATASEG
- enterIPX DD FAR
-
- CODESEG
- PROC _IPXinit;
- P_START
- PUSH_REGS
- mov ax, 7A00h
- int 2Fh
- cmp al, 0FFh
- jne @@fertig
- mov cx, @data
- mov ds, cx
- mov [WORD PTR enterIPX], di
- mov ax, es
- mov [WORD PTR enterIPX+2], ax
- mov al, 1 ; OK
- @@fertig:
- mov ah, 0
- POP_REGS
- P_END
- ret ; OK = 1 ; nicht ok = 0
- ENDP
-
- PROC _xmemmove;
- ARG z:DATAPTR, q:DATAPTR, nmbr:WORD; Argumente
- cli ; Disable Interrupts
- push bp
- mov bp,sp
- mov cx, [nmbr];
- or cx, cx;
- jz @@fertig; Anzahl ist 0;
- push ds;
- push si;
- push di;
- pushf
- lds si, [q] ; Quelle
- les di, [z] ; Ziel
- cmp di, si ;
- jl @@L1 ; Ziel ist kleiner
- std ; Richtungsflag setzen
- dec cx
- add di, cx ; Von oben nach unten kopieren
- add si, cx ;
- inc cx ; alten Wert wiederherstellen
- jmp @@L2;
- @@L1:
- cld ; Richtungsflag loeschen
- @@L2: ; und nun das eigentliche kopieren
- REP movsb ;
- popf
- pop di;
- pop si;
- pop ds;
- @@fertig:
- pop bp;
- sti ; enable Interrupts
- ret
- ENDP
-
- PROC _IPXopen_socket;
- ARG sock:WORD, live:WORD
- P_START
- PUSH_REGS
- mov ax, [live]
- mov dx, [sock]
- mov bx, @data
- mov ds, bx
- mov bx, 0
- call [enterIPX]
- cmp al, 0FFh
- jne @@L1
- mov ax, -1 ; Socket already open
- jmp @@L3
- @@L1:
- cmp al, 0FEh
- jne @@L2
- mov ax, -2 ; Socket Table full
- jmp @@L3
- @@L2:
- mov ax, dx
- @@L3:
- POP_REGS
- P_END
- ret
- ENDP
-
- PROC _IPXclose_socket;
- ARG sock:WORD
- P_START
- PUSH_REGS
- mov dx, [sock]
- mov bx, @data
- mov ds, bx
- mov bx, 1
- call [enterIPX]
- POP_REGS
- P_END
- ret
- ENDP
-
- PROC _IPXlisten;
- ARG ecb:DATAPTR
- P_START
- PUSH_REGS
- les si, [ecb] ; Adresse ecb
- mov bx, @data
- mov ds, bx
- mov bx, 4
- call [enterIPX]
- POP_REGS
- P_END
- mov ah, 0
- ret
- ENDP
-
- ;; PROC _asm_esr_routine;
- ;; push bp;
- ;; PUSH_REGS;
- ;; mov ax, @data
- ;; mov ds, ax ; Für C PROGRAMM
- ;; push es; Adressegment vom EBC
- ;; push si; Adressoffset vom ECB
- ;; call _esr_routine; C ROUTINE
- ;; pop si;
- ;; pop es;
- ;; POP_REGS;
- ;; pop bp;
- ;; cli ; no Interrupt says NOVELL
- ;; ret
- ;; ENDP
-
-
- PROC _Net_Call;
- ARG func:WORD, req:DATAPTR, repl:DATAPTR; Argumente
- push bp
- mov bp, sp
- mov ax, [func];
- push ds;
- push si;
- push di;
- pushf
- lds si, [req] ; Request
- les di, [repl] ; Reply
- int 21h
- popf
- pop di;
- pop si;
- pop ds;
- pop bp;
- mov ah, 0
- ret
- ENDP
-
- END
-
-
-
-
-
-
-
-
-